import { IPSSystemModule } from '../system/ipssystem-module';
import { IPSModelObject } from '../ipsmodel-object';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSSysSFPlugin
 */
export interface IPSSysSFPlugin extends IPSModelObject {
  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  get psSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块（必须存在）
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModuleMust(): IPSSystemModule;

  /**
   * 插件代码
   * @type {string}
   */
  pluginCode: string;

  /**
   * 插件模型
   * @type {IModel}
   */
  pluginModel: IModel;

  /**
   * 插件动态参数
   * @type {IModel}
   */
  pluginParams: IModel;

  /**
   * 插件类型
   * @description 值模式 [后台服务插件类型] {DEACTION：实体行为、 DELOGIC：实体逻辑、 DELOGICNODE：实体逻辑节点、 DEDATASET：实体数据集、 USER：用户自定义、 SYSREF：系统引用、 MODULE：系统模块、 STRFUNC：字符串操作（废弃）、 MATHFUNC：数学函数（废弃）、 DOCFUNC：文档操作（废弃） }
   * @type {( string | 'DEACTION' | 'DELOGIC' | 'DELOGICNODE' | 'DEDATASET' | 'USER' | 'SYSREF' | 'MODULE' | 'STRFUNC' | 'MATHFUNC' | 'DOCFUNC')}
   */
  pluginType: string | 'DEACTION' | 'DELOGIC' | 'DELOGICNODE' | 'DEDATASET' | 'USER' | 'SYSREF' | 'MODULE' | 'STRFUNC' | 'MATHFUNC' | 'DOCFUNC';

  /**
   * 运行时对象名称
   * @type {string}
   */
  rTObjectName: string;

  /**
   * 运行时对象仓库
   * @type {string}
   */
  rTObjectRepo: string;

  /**
   * 运行时对象来源
   * @type {number}
   * @default 0
   */
  rTObjectSource: number;

  /**
   * 运行时模板代码
   * @type {string}
   */
  templCode: string;

  /**
   * 运行时模板代码2
   * @type {string}
   */
  templCode2: string;

  /**
   * 运行时模板代码3
   * @type {string}
   */
  templCode3: string;

  /**
   * 运行时模板代码4
   * @type {string}
   */
  templCode4: string;

  /**
   * 延迟加载模式
   * @type {boolean}
   * @default false
   */
  lazyMode: boolean;

  /**
   * 全局默认替换
   * @type {boolean}
   * @default false
   */
  replaceDefault: boolean;

  /**
   * 运行时对象
   * @type {boolean}
   * @default false
   */
  runtimeObject: boolean;

  /**
   * 尝试模式
   * @type {boolean}
   * @default false
   */
  tryMode: boolean;
}
